home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / mach / sun3.md / machMon.h < prev    next >
C/C++ Source or Header  |  1992-12-18  |  9KB  |  313 lines

  1. /*
  2.  * machMon.h --
  3.  *
  4.  *     Structures, constants and defines for access to the sun monitor.
  5.  *     These are translated from the sun monitor header file "sunromvec.h".
  6.  *
  7.  * NOTE: The file keyboard.h in the monitor directory has all sorts of useful
  8.  *       keyboard stuff defined.  I haven't attempted to translate that file
  9.  *       because I don't need it.  If anyone wants to use it, be my guest.
  10.  *
  11.  * Copyright (C) 1985 Regents of the University of California
  12.  * All rights reserved.
  13.  *
  14.  *
  15.  * $Header: /cdrom/src/kernel/Cvsroot/kernel/mach/sun3.md/machMon.h,v 9.1 90/10/03 13:52:34 mgbaker Exp $ SPRITE (Berkeley)
  16.  */
  17.  
  18. #ifndef _MACHMON
  19. #define _MACHMON
  20.  
  21. /*
  22.  * The memory addresses for the PROM, and the EEPROM.
  23.  * On the sun2 these addresses are actually 0x00EF??00
  24.  * but only the bottom 24 bits are looked at so these still
  25.  * work ok.
  26.  */
  27.  
  28. #define EEPROM_BASE     0x0fe04000
  29. #define PROM_BASE       0x0fef0000
  30.  
  31. /*
  32.  * The table entry that describes a device.  It exists in the PROM; a
  33.  * pointer to it is passed in MachMonBootParam.  It can be used to locate
  34.  * PROM subroutines for opening, reading, and writing the device.
  35.  *
  36.  * When using this interface, only one device can be open at once.
  37.  *
  38.  * NOTE: I am not sure what arguments boot, open, close, and strategy take.  
  39.  * What is here is just translated verbatim from the sun monitor code.  We 
  40.  * should figure this out eventually if we need it.
  41.  */
  42.  
  43. typedef struct {
  44.     char    devName[2];        /* The name of the device */
  45.     int    (*probe)();        /* probe() --> -1 or found controller 
  46.                        number */
  47.     int    (*boot)();        /* boot(bp) --> -1 or start address */
  48.     int    (*open)();        /* open(iobp) --> -1 or 0 */
  49.     int    (*close)();        /* close(iobp) --> -1 or 0 */
  50.     int    (*strategy)();        /* strategy(iobp,rw) --> -1 or 0 */
  51.     char    *desc;            /* Printable string describing dev */
  52. } MachMonBootTable;
  53.  
  54. /*
  55.  * Structure set up by the boot command to pass arguments to the program that
  56.  * is booted.
  57.  */
  58.  
  59. typedef struct {
  60.     char        *argPtr[8];    /* String arguments */
  61.     char        strings[100];    /* String table for string arguments */
  62.     char        devName[2];    /* Device name */
  63.     int        ctlrNum;    /* Controller number */
  64.     int        unitNum;    /* Unit number */
  65.     int        partNum;    /* Partition/file number */
  66.     char        *fileName;    /* File name, points into strings */
  67.     MachMonBootTable   *bootTable;    /* Points to table entry for device */
  68. } MachMonBootParam;
  69.  
  70. /*
  71.  * Here is the structure of the vector table which is at the front of the boot
  72.  * rom.  The functions defined in here are explained below.
  73.  *
  74.  * NOTE: This struct has references to the structures keybuf and globram which
  75.  *       I have not translated.  If anyone needs to use these they should
  76.  *       translate these structs into Sprite format.
  77.  */
  78.  
  79. typedef struct {
  80.     char        *initSp;        /* Initial system stack ptr  
  81.                          * for hardware */
  82.     int        (*startMon)();        /* Initial PC for hardware */
  83.  
  84.     int        *diagberr;        /* Bus err handler for diags */
  85.  
  86.     /* 
  87.      * Monitor and hardware revision and identification
  88.      */
  89.  
  90.     MachMonBootParam **bootParam;        /* Info for bootstrapped pgm */
  91.      unsigned    *memorySize;        /* Usable memory in bytes */
  92.  
  93.     /* 
  94.      * Single-character input and output 
  95.      */
  96.  
  97.     unsigned char    (*getChar)();        /* Get char from input source */
  98.     int        (*putChar)();        /* Put char to output sink */
  99.     int        (*mayGet)();        /* Maybe get char, or -1 */
  100.     int        (*mayPut)();        /* Maybe put char, or -1 */
  101.     unsigned char    *echo;            /* Should getchar echo? */
  102.     unsigned char    *inSource;        /* Input source selector */
  103.     unsigned char    *outSink;        /* Output sink selector */
  104.  
  105.     /* 
  106.      * Keyboard input (scanned by monitor nmi routine) 
  107.      */
  108.  
  109.     int        (*getKey)();        /* Get next key if one exists */
  110.     int        (*initGetKey)();    /* Initialize get key */
  111.     unsigned int    *translation;        /* Kbd translation selector 
  112.                            (see keyboard.h in sun 
  113.                             monitor code) */
  114.     unsigned char    *keyBid;        /* Keyboard ID byte */
  115.     int        *screen_x;        /* V2: Screen x pos (R/O) */
  116.     int        *screen_y;        /* V2: Screen y pos (R/O) */
  117.     struct keybuf    *keyBuf;        /* Up/down keycode buffer */
  118.  
  119.     /*
  120.      * Monitor revision level.
  121.      */
  122.  
  123.     char        *monId;
  124.  
  125.     /* 
  126.      * Frame buffer output and terminal emulation 
  127.      */
  128.  
  129.     int        (*fbWriteChar)();    /* Write a character to FB */
  130.     int        *fbAddr;        /* Address of frame buffer */
  131.     char        **font;            /* Font table for FB */
  132.     int        (*fbWriteStr)();    /* Quickly write string to FB */
  133.  
  134.     /* 
  135.      * Reboot interface routine -- resets and reboots system.  No return. 
  136.      */
  137.  
  138.     int        (*reBoot)();        /* e.g. reBoot("xy()vmunix") */
  139.  
  140.     /* 
  141.      * Line input and parsing 
  142.      */
  143.  
  144.     unsigned char    *lineBuf;        /* The line input buffer */
  145.     unsigned char    **linePtr;        /* Cur pointer into linebuf */
  146.     int        *lineSize;        /* length of line in linebuf */
  147.     int        (*getLine)();        /* Get line from user */
  148.     unsigned char    (*getNextChar)();    /* Get next char from linebuf */
  149.     unsigned char    (*peekNextChar)();    /* Peek at next char */
  150.     int        *fbThere;        /* =1 if frame buffer there */
  151.     int        (*getNum)();        /* Grab hex num from line */
  152.  
  153.     /* 
  154.      * Print formatted output to current output sink 
  155.      */
  156.  
  157.     int        (*printf)();        /* Similar to "Kernel printf" */
  158.     int        (*printHex)();        /* Format N digits in hex */
  159.  
  160.     /*
  161.      * Led stuff 
  162.      */
  163.  
  164.     unsigned char    *leds;            /* RAM copy of LED register */
  165.     int        (*setLeds)();        /* Sets LED's and RAM copy */
  166.  
  167.     /* 
  168.      * Non-maskable interrupt  (nmi) information
  169.      */ 
  170.  
  171.     int        (*nmiAddr)();        /* Addr for level 7 vector */
  172.     int        (*abortEntry)();    /* Entry for keyboard abort */
  173.     int        *nmiClock;        /* Counts up in msec */
  174.  
  175.     /*
  176.      * Frame buffer type: see <sun/fbio.h>
  177.      */
  178.  
  179.     int        *fbType;
  180.  
  181.     /* 
  182.      * Assorted other things 
  183.      */
  184.  
  185.     unsigned    romvecVersion;        /* Version # of Romvec */ 
  186.     struct globram  *globRam;        /* monitor global variables */
  187.     Address        kbdZscc;        /* Addr of keyboard in use */
  188.  
  189.     int        *keyrInit;        /* ms before kbd repeat */
  190.     unsigned char    *keyrTick;         /* ms between repetitions */
  191.     unsigned    *memoryAvail;        /* V1: Main mem usable size */
  192.     long        *resetAddr;        /* where to jump on a reset */
  193.     long        *resetMap;        /* pgmap entry for resetaddr */
  194.                         /* Really struct pgmapent *  */
  195.     int        (*exitToMon)();        /* Exit from user program */
  196.     unsigned char    **memorybitmap;        /* V1: &{0 or &bits} */
  197.     void        (*setcxsegmap)();    /* Set seg in any context */
  198.     void        (**vector_cmd)();    /* V2: Handler for 'v' cmd */
  199.     int        dummy1z;
  200.     int        dummy2z;
  201.     int        dummy3z;
  202.     int        dummy4z;
  203. } MachMonRomVector;
  204.  
  205. /*
  206.  * Functions defined in the vector:
  207.  *
  208.  *
  209.  * getChar -- Return the next character from the input source
  210.  *
  211.  *     unsigned char getChar()
  212.  *
  213.  * putChar -- Write the given character to the output source.
  214.  *
  215.  *     void putChar(ch)
  216.  *       char ch;    
  217.  *
  218.  * mayGet -- Maybe get a character from the current input source.  Return -1 
  219.  *           if don't return a character.
  220.  *
  221.  *     int mayGet()
  222.  *    
  223.  * mayPut -- Maybe put a character to the current output source.   Return -1
  224.  *           if no character output.
  225.  *
  226.  *    int  mayPut(ch)
  227.  *        char ch;
  228.  *
  229.  * getKey -- Returns a key code (if up/down codes being returned),
  230.  *          a byte of ASCII (if that's requested),
  231.  *          NOKEY (if no key has been hit).
  232.  *
  233.  *    int getKey()
  234.  *    
  235.  * initGetKey --  Initialize things for get key.
  236.  *
  237.  *    void initGetKey()
  238.  *
  239.  * fbWriteChar -- Write a character to the frame buffer
  240.  *
  241.  *    void fwritechar(ch)
  242.  *        unsigned char ch;
  243.  *
  244.  * fbWriteStr -- Write a string to the frame buffer.
  245.  *
  246.  *       void fwritestr(addr,len)
  247.  *          register unsigned char *addr;    / * String to be written * /
  248.  *          register short len;            / * Length of string * /
  249.  *
  250.  * getLine -- read the next input line into a global buffer
  251.  *
  252.  *    getline(echop)
  253.  *          int echop;    / * 1 if should echo input, 0 if not * /
  254.  *
  255.  * getNextChar -- return the next character from the global line buffer.
  256.  *
  257.  *    unsigned char getNextChar()
  258.  *
  259.  * peekNextChar -- look at the next character in the global line buffer.
  260.  *
  261.  *    unsigned char peekNextChar()
  262.  *
  263.  * getNum -- Grab hex num from the global line buffer.
  264.  *
  265.  *    int getNum()
  266.  *
  267.  * printf -- Scaled down version of C library printf.  Only %d, %x, %s, and %c
  268.  *          are recognized.
  269.  *
  270.  * printhex -- prints rightmost <digs> hex digits of <val>
  271.  *
  272.  *      printhex(val,digs)
  273.  *          register int val;
  274.  *             register int digs;
  275.  *
  276.  * abortEntry -- Entry for keyboard abort.
  277.  *
  278.  *     abortEntry()
  279.  */
  280.  
  281. /*
  282.  * Where the rom vector is defined.
  283.  */
  284.  
  285. #define    romVectorPtr    ((MachMonRomVector *) PROM_BASE)
  286.  
  287. /*
  288.  * Functions and defines to access the monitor.
  289.  */
  290.  
  291. #define Mach_MonPrintf (romVectorPtr->printf)
  292.  
  293. extern void Mach_MonPutChar _ARGS_((int ch));
  294. extern int Mach_MonMayPut _ARGS_((int ch));
  295. extern void Mach_MonAbort _ARGS_((void));
  296. extern void Mach_MonReboot _ARGS_((char *rebootString));
  297. extern void Mach_MonStartNmi _ARGS_((void));
  298. extern void Mach_MonStopNmi _ARGS_((void));
  299.  
  300. extern  void    Mach_MonTrap _ARGS_((Address address_to_trap_to));
  301.  
  302. /*
  303.  * These routines no longer work correctly with new virtual memory.
  304.  */
  305.  
  306. #define Mach_MonGetChar (romVectorPtr->getChar)
  307. #define Mach_MonGetLine (romVectorPtr->getLine)
  308. #define Mach_MonGetNextChar (romVectorPtr->getNextChar)
  309. #define Mach_MonPeekNextChar (romVectorPtr->peekNextChar)
  310.  
  311.  
  312. #endif /* _MACHMON */
  313.